10 REM ARRAYS 12 DIM B(12),A$(36),B$(36),C$(12) 14 : 16 REM TITLE 18 POKE 53280,7:POKE 53281,7 20 A$="*":TL=40:PRINT "[147] ";A$;:FOR F=1 TO 3 22 FOR A=1 TO 6:GOSUB 2750:PRINT "[157] [157]";A$;:NEXT A 24 FOR A=1 TO 5:GOSUB 2750:PRINT "[157] [157][157]";A$;:NEXT A 26 GOSUB 2750:PRINT "[157] [157]";A$;:READ B$:GOSUB 2950 28 FOR A=1 TO 5:PRINT "[157] ";:GOSUB 2750:PRINT "[157]";A$;:GOSUB 2750:NEXT A 29 NEXT F:GOSUB 2550:D=0 30 : 32 REM INSTRUCTIONS 34 B$="[147][144] ELMER'S INSTRUCTIONS FOR YOU:" 36 TL=1:GOSUB 2950:PRINT "[157] [157]";A$; 38 FOR A=1 TO LEN(B$)-3:PRINT "[157] [157][157]*";:GOSUB 2750:NEXT A 40 READ B$:IF B$="END" THEN 60 42 PRINT "[157] [157]";A$;:GOSUB 2950 44 READ B$:IF B$="END" THEN 60 46 PRINT "[157] [157]";A$;:A=LEN(B$):FOR C=1 TO A 48 PRINT "[157]";MID$(B$,A-C+1,1)"[157][157]";A$; 50 GOSUB 2750:NEXT C:GOTO 40 60 TL=40 62 GET B$:IF B$<>"" THEN 100 64 PRINT "[157] ";:GOSUB 2750 66 PRINT "[157]";A$;:GOSUB 2750:GOTO 62 100 : 140 REM VARIABLES 170 READ B$:IF B$="END"THENBL=B:GOTO200 180 B=B+1:B$(B)=B$:B(B)=LEN(B$) 190 READ C(B):GOTO 170 200 S$=" " 210 ER$="[145]"+S$+S$+S$+"[145]" 220 TL=50:AL=36:D=54272:U=10 699 : 700 REM ....RESTART ADDRESS 710 : 730 REM STATEMENT LIST DISPLAY 735 POKE 53280,3:POKE 53281,3:POKE 646,6 740 PRINT "[147]";:N=18:FOR O=1 TO 18 750 PRINT "";RIGHT$(STR$(O),2);". "; 760 PRINT "";A$(O);TAB(20); 770 PRINT "";RIGHT$(STR$(O+N),2);". "; 780 PRINT "";A$(O+N):NEXT O:PRINT 790 IF Q=1 THEN 980 800 : 810 REM LINE # INPUT 830 INPUT "LINE #, 'E' OR 'NEW'";I$ 840 PRINT ER$:IF I$="E" THEN 1610 850 IF I$<>"NEW" THEN 870 860 FOR A=1 TO 36:A$(A)="":NEXT:GOTO710 870 I=LEN(I$):IF I<1 OR I>3 THEN 940 880 IF I$="0" THEN 940 890 N=ASC(I$):IF N<49 OR N>57 THEN 940 900 N=ASC(RIGHT$(I$,1)) 910 IF N<49 AND N>57 THEN 940 920 A=VAL(I$) 930 IF A>0 AND A=BL THEN 1040 1030 PRINT TAB(N*10);B$(B); 1040 NEXT N:PRINT:NEXT M 1050 PRINT "I[158]NSERT D[158]ELETE "; 1060 PRINT "B[158]ACK TO LINE #" 1070 : 1080 REM STATEMENT INPUT 1100 PRINT "LINE";A;:I$="":INPUT I$ 1110 PRINT ER$:IF I$="" THEN GOSUB 2500:GOTO 1070 1120 IF I$="I" THEN 1540 1130 IF I$="D" THEN 1580 1140 IF I$="B" THEN Q=0:GOTO 710 1150 : 1160 REM IS 'I$' VALID? 1180 B=0:I=LEN(I$) 1190 B=B+1:IF B>BL THEN GOSUB 2500:GOTO 1070 1200 IF LEFT$(I$,B(B))<>B$(B) THEN 1190 1210 REM ....STMT #C 1220 C=C(B):IF C>0 THEN 1260 1230 REM ....STMT TYPE 0 1240 IF I$=B$(B) THEN A$(A)=I$:Q=0:GOTO 710 1250 GOTO 1370 1260 M$=RIGHT$(I$,I-B(B)) 1270 GOSUB 2590 1280 J$=M$:J=LEN(J$):IF C>1 THEN 1420 1290 REM ....STMT TYPE 1 1300 IF J=0 OR J>2 THEN 1370 1310 N=ASC(LEFT$(J$,1)) 1320 IF N<48 OR N>57 THEN 1370 1330 N=ASC(RIGHT$(J$,1)) 1340 IF N<48 OR N>57 THEN 1370 1350 N=VAL(J$):IF B=8 AND N<16 THEN 1460 1360 IF B<>8 AND N>0 THEN 1460 1370 GOSUB 2500:GOTO 1070 1420 IF C>2 THEN 1480 1430 REM ....STMT TYPE 2 1440 IF J<>1 THEN 1370 1450 N=ASC(J$):IF N<33 OR N>95 THEN 1370 1460 REM ....I$ IS VALID STATEMENT 1470 A$(A)=B$(B)+" "+J$:Q=0:GOTO 710 1480 IF C>3 THEN 1370 1490 REM ....STMT TYPE 3 1500 IF MID$(I$,5,1)=" " THEN 1520 1510 I$=LEFT$(I$,4)+" "+MID$(I$,5) 1520 N=LEN(I$):IF N<6 OR N>15 THEN 1370 1530 A$(A)=I$:Q=0:GOTO 710 1540 REM ....INSERT BLANK LINE 1550 FOR M=35 TO A STEP -1 1560 A$(M+1)=A$(M):NEXT M 1570 A$(A)="":Q=0:GOTO 710 1580 REM ....DELETE LINE 1590 IF A=36 THEN 1600 1595 FOR M=A TO 35:A$(M)=A$(M+1):NEXT 1600 A$(36)="":Q=0:GOTO 710 1610 : 1620 REM BEGIN EXECUTION 1640 X=1:Y=1:REM INITIAL POSITION 1650 E=2:REM INITIAL PEN POSITION 1660 H$="*":REM INITIAL CHARACTER 1670 L=6:REM INITIAL COLOR # 1680 POKE 53280,5:REM BORDER COLOR 1690 PRINT "[147]":GOSUB 2770:GOSUB 2710 1700 REM ....STATEMENT LIST 1710 FOR A=1 TO AL:A$=A$(A) 1720 IF A$="" THEN 2330 1730 B=0 1740 B=B+1 1750 IF LEFT$(A$,B(B))<>B$(B) THEN 1740 1760 ON B GOTO 1780,1850,1920,1990,2060,2100,2130,2170,2210,2290 1770 : 1780 REM ....RIGHT 1790 M$=RIGHT$(A$,LEN(A$)-B(B)) 1800 GOSUB 2590:M=VAL(M$) 1810 FOR N=1 TO M:GOSUB 2370 1820 X=X+1:IF X=41 THEN X=1 1830 GOSUB 2710:NEXT N:GOTO 2330 1840 : 1850 REM ....UP 1860 M$=RIGHT$(A$,LEN(A$)-B(B)) 1870 GOSUB 2590:M=VAL(M$) 1880 FOR N=1 TO M:GOSUB 2370 1890 Y=Y-1:IF Y=0 THEN Y=25 1900 GOSUB 2710:NEXT N:GOTO 2330 1910 : 1920 REM ....DOWN 1930 M$=RIGHT$(A$,LEN(A$)-B(B)) 1940 GOSUB 2590:M=VAL(M$) 1950 FOR N=1 TO M:GOSUB 2370 1960 Y=Y+1:IF Y=26 THEN Y=1 1970 GOSUB 2710:NEXT N:GOTO 2330 1980 : 1990 REM ....LEFT 2000 M$=RIGHT$(A$,LEN(A$)-B(B)) 2010 GOSUB 2590:M=VAL(M$) 2020 FOR N=1 TO M:GOSUB 2370 2030 X=X-1:IF X=0 THEN X=40 2040 GOSUB 2710:NEXT N:GOTO 2330 2050 : 2060 REM ....PEN UP 2070 IF E=0 THEN E=1 2080 GOTO 2330 2090 : 2100 REM ....PEN DOWN 2110 E=0:GOTO 2330 2120 : 2130 REM ....CHAR 2140 H$=RIGHT$(A$,1):GOSUB 2770 2150 P=983+X+Y*40:POKE P,K 2152 GOSUB 2750:GOTO 2330 2160 : 2170 REM ....COLOR 2180 L=VAL(MID$(A$,6)):P=983+X+Y*40 2190 POKE P+D,L:GOSUB 2750:GOTO 2330 2200 : 2210 REM ....TEXT 2220 A$=MID$(A$,6):M=LEN(A$) 2225 X=X-1:IF X=0 THEN X=40 2230 GOSUB 2370:J=K:FOR N=1 TO M 2240 H$=MID$(A$,N,1):GOSUB 2770 2250 X=X+1:IF X=41 THEN X=1 2260 GOSUB 2710:NEXT N 2270 K=J:F=1:M=1:GOTO 1810 2280 : 2290 REM ....STOP 2300 A$="" 2310 GET A$:IF A$="" THEN 2310 2320 GOTO 2330 2330 NEXT A:Q=0:GOTO 710 2340 : 2350 REM SUBROUTINES 2360 : 2370 REM ....ERASE PREVIOUS POINT? 2380 IF F=1 THEN F=0:RETURN 2390 IF E=1 THEN E=2:RETURN 2400 IF E=2 THEN POKE P+D,V:POKE P,W 2410 RETURN 2420 : 2430 REM ....INSTRUCTION INPUT 2440 PRINT "" 2450 PRINT " PRESS ANY KEY TO "; 2460 PRINT "CONTINUE":A$="" 2470 GET A$:IF A$="" THEN 2470 2480 PRINT "[147]":RETURN 2490 : 2500 REM ....ERROR MESSAGE 2510 PRINT ,"[144]I DON'T UNDERSTAND THAT" 2520 GOSUB 2560:PRINT ER$ 2530 PRINT ,"PLEASE TRY AGAIN" 2540 GOSUB 2560:PRINT ER$:RETURN 2550 : 2560 REM ....SCREEN MESSAGE DELAY 2570 FOR T=1 TO 500:NEXT T:RETURN 2580 : 2590 REM ....TRUNCATE M$ 2600 IF M$="" THEN RETURN 2610 M=ASC(LEFT$(M$,1)) 2620 IF M=32 THEN 2640 2630 IF M<>160 THEN 2650 2640 M$=RIGHT$(M$,LEN(M$)-1):GOTO 2610 2650 IF M$="" THEN RETURN 2660 M=ASC(RIGHT$(M$,1)) 2670 IF M=32 THEN 2690 2680 IF M<>160 THEN RETURN 2690 M$=LEFT$(M$,LEN(M$)-1):GOTO 2650 2700 : 2710 REM ....POKE SCREEN CHARACTER 2720 P=983+X+Y*40 2730 V=PEEK(P+D):WL=W:W=PEEK(P) 2740 POKE P+D,L:POKE P,K 2750 FOR T=1 TO TL:NEXT T:RETURN 2760 : 2770 REM ....CALC SCREEN DISPLAY VALUE 2780 H=ASC(H$):IF H<64 THEN K=H:RETURN 2790 K=H-64:RETURN 2800 : 2950 FOR C=1 TO LEN(B$) 2960 PRINT "[157]";MID$(B$,C,1);A$; 2970 GOSUB 2750:NEXT C:RETURN 3000 : 3002 REM FIXED DATA 3004 : 3006 REM ....PLAYER INSTRUCTIONS 3008 DATA "[144]HI, I'M ELMER.","I'M A TURTLE.","LET'S PLAY A GAME....." 3010 DATA "ELMER IS A TINY TURTLE WHO CAN DRAW AND" 3012 DATA " WRITE ALL OVER THE SCREEN IF YOU GIVE" 3014 DATA " HIM A LIST OF SIMPLE INSTRUCTIONS. " 3016 DATA " " 3018 DATA "FIRST, ENTER EITHER A LINE NUMBER ON " 3020 DATA " THE LIST, OR 'NEW' TO ERASE THE WHOLE" 3022 DATA " LIST, OR 'E' TO WATCH ELMER FOLLOW " 3024 DATA " YOUR INSTRUCTIONS. " 3026 DATA " " 3028 DATA "IF YOU ENTERED A LIST LINE NUMBER, YOU " 3030 DATA " CAN THEN ENTER ONE OF THE INSTRUC- " 3032 DATA " TIONS SHOWN BELOW THE LIST. " 3033 DATA " " 3034 DATA "YOU CAN ALSO DELETE OR INSERT LINES. " 3036 DATA " " 3037 DATA " " 3038 DATA " PRESS ANY KEY TO START PLAYING...." 3040 DATA END 3110 : 3120 REM ....ELMER INSTRUCTIONS 3130 DATA RIGHT,1,UP,1,DOWN,1,LEFT,1 3140 DATA PEN UP,0,PEN DOWN,0,CHAR,2 3150 DATA COLOR,1,TEXT,3,STOP,0 3160 DATA END